package org.itboys.param;

import org.apache.commons.lang.StringUtils;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;


/**
 * 包名：com.hz.sunday.tianjie.utils
 * 作者 : 江雄
 * Email: empty90911@126.com
 * 时间：2017年2月25日 下午2:06:28
 * 描述:bootstrap和后台交互，MYSQL分页参数工具。当前端使用bootstrap或easyUi时，使用此工具，组装分页参数
 *
 * 2017年3月29日，需要兼容easyUI和mobile（手机端）。
 * bootstrap分页参数：offset(起始位置)，limit（条数）
 * mobile（手机端）分页参数：pageNumber(页数),pageSize(条数)
 * easyUi分页参数：page(页数),rows(条数)
 *
 *
 * bootstrap排序参数：sort(排序字段)，order（排序方向）
 * mobile（手机端）排序参数：sort(排序字段),order(排序方向)
 * easyUi排序参数：sort(排序字段),order(排序方向)
 *
 */

public class ParamUtil {
		
	 	public static Integer ROW_START = 0;//数据开始
	 	public static Integer ROW_SIZE = 20;//默认每页大小

	 	public static String SORT_NAME ="id";//默认排序字段
	 	public static String SORT_ORDER="DESC";//默认排序顺序


	/**
	 * 组织mysql数据库的查询参数（含分页，排序和自定义的查询参数），
	 * @param request
	 * @param columns。要查询的列，允许多个
	 * @return
	 * 说明：
	 * 前端（排序参数）：传入参数结果：sort=id,order=DESC。页面table标签，可以默认指明排序的字段和顺序：<table  data-sort-name="id" 	data-sort-order="DESC"></table>。组装
	 * 前端（分页参数）：传入参数结果：offset=0，limit=10，已经是表中行开始的位置和结束位置；easyUI传入的是page（第几页），row：每页数量
	 */
	public static Map<String,Object> packageMysqlPageParam(HttpServletRequest request,String...columns){

		Map<String,Object> param = new HashMap<String, Object>();
		//组装分页参数
	//	Integer rowStart =StringUtils.isNotEmpty(request.getParameter("offset"))?Integer.valueOf(request.getParameter("offset")):ROW_START;
	//	Integer rowSize =StringUtils.isNotEmpty(request.getParameter("limit"))?Integer.valueOf(request.getParameter("limit")):ROW_SIZE;

		Integer rowStart =ROW_START;
		Integer rowSize =ROW_SIZE;
	/*********************分页参数需要兼容bootstrap,easyUI，mobile（手机端）**/
	/* * bootstrap分页参数：offset(起始位置)，limit（条数）
 	* mobile（手机端）分页参数：pageNumber(页数),pageSize(条数)
	* easyUi分页参数：page(页数),rows(条数)**/
	//1，兼容bootstrap
		if(StringUtils.isNotEmpty(request.getParameter("offset"))&&
				StringUtils.isNotEmpty(request.getParameter("limit"))){
			rowStart=Integer.valueOf(request.getParameter("offset"));
			rowSize=Integer.valueOf(request.getParameter("limit"));
		}
	//2，兼容easyUI。asyUi分页参数：page(页数),rows(条数)
		if(StringUtils.isNotEmpty(request.getParameter("page"))&&
				StringUtils.isNotEmpty(request.getParameter("rows"))){
			Integer page=Integer.valueOf(request.getParameter("page"));
			Integer rows=Integer.valueOf(request.getParameter("rows"));
			rowStart=(page-1)*rows;
			rowSize=rows;
		}
	//3，兼容mobile（手机端）。分页参数：pageNumber(页数),pageSize(条数)
		if(StringUtils.isNotEmpty(request.getParameter("pageNumber"))&&
				StringUtils.isNotEmpty(request.getParameter("pageSize"))){
			Integer pageNumber=Integer.valueOf(request.getParameter("pageNumber"));
			Integer pageSize=Integer.valueOf(request.getParameter("pageSize"));
			rowStart=(pageNumber-1)*pageSize;
			rowSize=pageSize;
		}


		param.put("row_start", rowStart);
		param.put("row_size", rowSize);
		//组装排序参数
		String sort =StringUtils.isNotEmpty(request.getParameter("sort"))?request.getParameter("sort"):SORT_NAME;
		param.put("sort_name", sort);
		String order =StringUtils.isNotEmpty(request.getParameter("order"))?request.getParameter("order"):SORT_ORDER;
		param.put("sort_order", order);
		//组装查询参数
		for(String column:columns){
			if(StringUtils.isNotEmpty(request.getParameter(column))){
				param.put(column, request.getParameter(column));

			}
		}
		return param;

	}

	/**
	 * 匹配mogno中精确查询参数。整数类型将会被转换为Long。其他不变。mongo查询会警告数据类型不匹配，请忽略
	 * @param request
	 * @param columns
	 * @return
	 */
	public static Map<String,Object> packageMongoExactParam(HttpServletRequest request,String...columns){
		Map<String,Object> param  = new HashMap<String,Object>();
		for(String column:columns){
			String value =request.getParameter(column);
			if(StringUtils.isNotBlank(value)){
				//判断参数值是否是整数数字。如：0或"0"

				if(Pattern.compile("^-?\\d*$").matcher(value).matches()||
						Pattern.compile("^(?:\"-?\\d+\"(?:,|$))+").matcher(value).matches()){
					param.put(column,Integer.valueOf(value));
				}else{

					param.put(column,value);
				}

			}
		}
		return param;
	}

	/**
	 * 匹配mongo中模糊查询参数
	 * @param request
	 * @param columns
	 * @return
	 */
	public static Map<String,String> packageMongoVagueParam(HttpServletRequest request,String...columns){
		Map<String,String> param  = new HashMap<String,String>();
		for(String column:columns){
			String value =request.getParameter(column);
			if(StringUtils.isNotBlank(value)){
				param.put(column,value);
			}
		}
		return param;
	}
	//public void Main
}
